package com.example.workflow.controller;

import com.example.workflow.dto.OperatorHistoryListDto;
import com.example.workflow.dto.OperatorStatsDto;
import com.example.workflow.exception.ServiceException;
import com.example.workflow.pojo.LoginUser;
import com.example.workflow.pojo.Result;
import com.example.workflow.service.OperatorStatsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 操作人员工单统计控制器
 */
@CrossOrigin
@RestController
@RequestMapping("/operator")
@Slf4j
public class OperatorStatsController {
    @Autowired
    private OperatorStatsService operatorStatsService;
    
    /**
     * 获取操作人员工单统计
     * 返回当前登录人员的工单处理统计，包括：
     * firstOrderCount：返回操作人员作为 operate_first（一级操作人员）处理的工单数量
     * secondOrderCount：返回操作人员作为 operate_second（二级操作人员）处理的工单数量
     * departmentDispatchedCount：返回操作人员所属部门派发的工单总数
     * 
     * @return 操作人员工单统计
     */
    @GetMapping("/count")
    public Result<OperatorStatsDto> getOperatorStats() {
        // 从Spring Security上下文获取用户ID
        Integer currentUserId = getCurrentUserId();
        if (currentUserId == null) {
            // 抛出未授权异常，让全局异常处理器处理
            throw new ServiceException(HttpStatus.UNAUTHORIZED.value(), "未登录或无权限");
        }
        
        log.info("获取操作人员工单统计，当前用户ID: {}", currentUserId);
        
        try {
            // 查询操作人员的工单统计
            OperatorStatsDto stats = operatorStatsService.getOperatorStats(currentUserId);
            return Result.success(stats);
        } catch (Exception e) {
            log.error("获取操作人员工单统计失败", e);
            return Result.error("获取操作人员工单统计失败: " + e.getMessage());
        }
    }
    
    /**
     * 获取当前登录操作人员处理过的历史工单列表
     * 返回操作人员处理过的所有工单基本信息，包括一级和二级操作
     * 
     * @return 历史工单列表
     */
    @GetMapping("/list")
    public Result<OperatorHistoryListDto> getOperatorHistoryList() {
        // 从Spring Security上下文获取用户ID
        Integer currentUserId = getCurrentUserId();
        if (currentUserId == null) {
            // 抛出未授权异常，让全局异常处理器处理
            throw new ServiceException(HttpStatus.UNAUTHORIZED.value(), "未登录或无权限");
        }
        
        log.info("获取操作人员历史工单列表，当前用户ID: {}", currentUserId);
        
        try {
            // 查询操作人员的历史工单列表
            OperatorHistoryListDto historyList = operatorStatsService.getOperatorHistoryList(currentUserId);
            return Result.success(historyList);
        } catch (Exception e) {
            log.error("获取操作人员历史工单列表失败", e);
            return Result.error("获取操作人员历史工单列表失败: " + e.getMessage());
        }
    }
    
    /**
     * 从Spring Security上下文获取用户ID
     */
    private Integer getCurrentUserId() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication != null && authentication.isAuthenticated()) {
            try {
                // 从LoginUser对象中获取用户ID
                LoginUser loginUser = (LoginUser) authentication.getPrincipal();
                return loginUser.getUserInfo().getId();
            } catch (Exception e) {
                log.error("获取当前用户ID失败", e);
                return null;
            }
        }
        return null;
    }
}